package org.itstack.demo.design;

/**
 * @Author: fanYuLe
 * @CreateTime: 2023-12-28  16:35
 * @Description:  定义状态抽象类
 * 在整个接⼝中提供了各项状态流转服务的接⼝，例如；活动提审、审核通过、审核拒绝、撤审撤销
 * 等7个⽅法。
 * 在这些⽅法中所有的⼊参都是⼀样的，activityId( 活动ID )、currentStatus( 当前状态 )，只有他们
 * 的具体实现是不同的。
 */
public abstract class State {
    /**
     * 活动提审
     *
     * @param activityId 活动ID
     * @param currentStatus 当前状态
     * @return 执行结果
     */
    public abstract Result arraignment(String activityId,Enum<Status> currentStatus);

    /**
     * 审核通过
     * @param activityId 活动ID
     * @param currentStatus 当前状态
     * @return 执行结果
     */
    public abstract Result checkPass(String activityId,Enum<Status> currentStatus);

    /**
     * 审核拒绝
     * @param activityId 活动Id
     * @param currentStatus 当前状态
     * @return 执行结果
     */
    public abstract Result checkRefuse(String activityId,Enum<Status> currentStatus);

    /**
     * 审核撤销
     * @param activityId 活动ID
     * @param currentStatus 当前状态
     * @return 执行结果
     */
    public abstract Result checkRevoke(String activityId,Enum<Status> currentStatus);
    /**
     * 活动关闭
     * @param activityId 活动ID
     * @param currentStatus 当前状态
     * @return 执行结果
     */
    public abstract Result close(String activityId,Enum<Status> currentStatus);

    /**
     * 活动开启
     * @param activityId 活动ID
     * @param currentStatus 当前状态
     * @return 执行结果
     */
    public abstract Result open(String activityId,Enum<Status> currentStatus);

    /**
     * 活动执行
     * @param activityId 活动ID
     * @param currentStatus 当前状态
     * @return 执行结果
     */
    public abstract Result doing(String activityId,Enum<Status> currentStatus);
}
